home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / (A)P / (A)P1.ADF / Cycloids / hypo2.c next >
C/C++ Source or Header  |  1987-05-25  |  3KB  |  168 lines

  1. /* hypo2.c */
  2.  
  3. double b,bc,c2,d,st,t;
  4. int aa, bb;
  5. int s = 4;
  6. int nr,fnx(),fny(),c1,n1;
  7. extern int SPAdd(),SPDiv(),SPMul(),SPSub(),SPTieee(),SPFieee();
  8. extern int SPSin(),SPCos();
  9. void doepic(),epic();
  10. extern double bf,cf,dd,bl,l,z;
  11. extern int an,bd,col,cc,rr,ex;
  12.  
  13. union kludge5
  14. {
  15.    FLOAT num5;
  16.    int i5;
  17. } k5;
  18. union kludge6
  19. {
  20.    FLOAT num6;
  21.    int i6;
  22. } k6;
  23.  
  24. void epic()
  25. {
  26.    int h,v;
  27.  
  28.    h=fnx(0)+65;
  29.    v=185-fny(0);
  30.    SetAPen(rp,s);
  31.    Move(rp,h,v);
  32.    st=b/nr;
  33.    ex=0;
  34.    t=st;
  35.    while (t<=b+st){
  36.       h=fnx(t)+65;
  37.       v=185-fny(t);
  38.       Draw(rp,h,v);
  39.       t+=st;
  40.    }
  41. }
  42.  
  43. fillscreen()
  44. {
  45.    SetAPen(rp,4);
  46.    SetDrMd(w->RPort,JAM1);
  47.    RectFill(w->RPort,0,0,320,200);
  48. }
  49.  
  50. precalculate()
  51. {
  52.    int n2;
  53.  
  54.    c1=aa-bb;
  55.    c2=(double)c1/bb;
  56.    b=2.0*PI*bb;
  57.    n1=-aa;
  58.    n2=aa;
  59.    d=(n2-n1)/180.0;
  60.    nr=25*(aa+bb);
  61.    if (nr>400)
  62.       nr=401;
  63.    z=1.0;
  64.    if (an!=0)
  65.       dd=360.0/an;
  66.    else
  67.       dd=360.0;
  68.    z=z-(cc/dd);
  69.    bd=bb;
  70.    bl=bb-bf*bb;
  71.    rr=1;
  72.    z=z+(cc/dd);
  73.    bc=bl-(cf*bd*(rr/dd));
  74.    l=(2*PI*an*rr)/360.0;
  75. }
  76.  
  77. void doepic()
  78. {
  79.    while ((rr*an)<360){
  80.       ex = stopcheck();
  81.       if (ex==1)
  82.          break;
  83.       ++rr;
  84.       ++s;
  85.       if (s>(col+4))
  86.          s=5;
  87.       z=z+(cc/dd);
  88.       bc=bl-(cf*bd*((rr-1)/dd));
  89.       l=(2*PI*an*rr)/360.0;
  90.       epic();
  91.    }
  92. }
  93.  
  94. int fnx(t)
  95. double t;
  96. {
  97.    k1.num1=t;
  98.    k2.num2=c2;
  99.    k5.num5=l;
  100.    k1.i1=SPFieee(k1.i1);
  101.    k2.i2=SPFieee(k2.i2);
  102.    k5.i5=SPFieee(k5.i5);
  103.    k3.i3=SPMul(k1.i1,k2.i2); /* t*c2 */
  104.    k2.i2=SPAdd(k3.i3,k5.i5); /* t*c2+l */
  105.    k4.i4=SPCos(k2.i2); /* cos(t*c2+l) */
  106.    k2.i2=SPAdd(k1.i1,k5.i5); /* t+l */
  107.    k3.i3=SPCos(k2.i2); /* cos(t+l) */
  108.    k1.num1=c1;
  109.    k2.num2=bc;
  110.    k1.i1=SPFieee(k1.i1);
  111.    k2.i2=SPFieee(k2.i2);
  112.    k5.i5=SPMul(k1.i1,k3.i3); /* c1*cos(t+l) */
  113.    k6.i6=SPMul(k2.i2,k4.i4); /* bc*cos(t*c2+l) */
  114.    k3.i3=SPAdd(k6.i6,k5.i5);
  115.    k1.num1=n1;
  116.    k2.num2=d;
  117.    k6.num6=z;
  118.    k1.i1=SPFieee(k1.i1);
  119.    k2.i2=SPFieee(k2.i2);
  120.    k6.i6=SPFieee(k6.i6);
  121.    k4.i4=SPDiv(k6.i6,k3.i3);
  122.    k3.i3=k4.i4;
  123.    k4.i4=SPSub(k1.i1,k3.i3);
  124.    k5.i5=SPDiv(k2.i2,k4.i4);
  125.    k5.i5=SPTieee(k5.i5);
  126.    return (int)k5.num5;
  127. }
  128.  
  129.  
  130. int fny(t)
  131. double t;
  132. {
  133.  
  134.    k1.num1=t;
  135.    k2.num2=c2;
  136.    k5.num5=l;
  137.    k1.i1=SPFieee(k1.i1);
  138.    k2.i2=SPFieee(k2.i2);
  139.    k5.i5=SPFieee(k5.i5);
  140.    k3.i3=SPMul(k1.i1,k2.i2); /* t*c2 */
  141.    k2.i2=SPAdd(k3.i3,k5.i5); /* t*c2+l */
  142.    k4.i4=SPSin(k2.i2); /* sin(t*c2+l) */
  143.    k2.i2=SPAdd(k1.i1,k5.i5); /* t+l */
  144.    k3.i3=SPSin(k2.i2); /* sin(t+l) */
  145.    k1.num1=c1;
  146.    k2.num2=bc;
  147.    k1.i1=SPFieee(k1.i1);
  148.    k2.i2=SPFieee(k2.i2);
  149.    k5.i5=SPMul(k1.i1,k3.i3); /* c1*sin(t+l) */
  150.    k6.i6=SPMul(k2.i2,k4.i4); /* bc*sin(t*c2+l) */
  151.    k3.i3=SPSub(k6.i6,k5.i5);
  152.    k1.num1=n1;
  153.    k2.num2=d;
  154.    k6.num6=z;
  155.    k1.i1=SPFieee(k1.i1);
  156.    k2.i2=SPFieee(k2.i2);
  157.    k6.i6=SPFieee(k6.i6);
  158.    k4.i4=SPDiv(k6.i6,k3.i3);
  159.    k3.i3=k4.i4;
  160.    k4.i4=SPSub(k1.i1,k3.i3);
  161.    k5.i5=SPDiv(k2.i2,k4.i4);
  162.    k1.num1=.5;
  163.    k1.i1=SPFieee(k1.i1);
  164.    k3.i3=SPAdd(k1.i1,k5.i5);
  165.    k3.i3=SPTieee(k3.i3);
  166.    return (int)k3.num3;
  167. }
  168.